package config

import (
	"go.uber.org/zap"
	"gopkg.in/yaml.v3"
	"os"
	"time"
)

type ServerConfig struct {
	HttpAddr    string      `yaml:"http_addr"`
	LogLevel    string      `yaml:"log_level"`
	LogFilePath string      `yaml:"log_file_path"`
	Logger      *zap.Logger `yaml:"-"` // 不是在配置文件提供的，而是公用配置文件这个结构体，在生成完logger后设置的
	JWTC        *JWT        `yaml:"jwt"`
}

// 根据io read读取配置文件，并解析yaml

func LoadServer(filename string) (*ServerConfig, error) {

	cfg := &ServerConfig{}

	content, err := os.ReadFile(filename)
	if err != nil {
		return nil, err
	}

	err = yaml.Unmarshal(content, cfg)
	if err != nil {
		return nil, err
	}

	// 解析过期时间
	exd, err := time.ParseDuration(cfg.JWTC.ExpiresTime)
	if err != nil {
		return nil, err
	}
	cfg.JWTC.ExpiresDuration = exd

	bud, err := time.ParseDuration(cfg.JWTC.BufferTime)
	if err != nil {
		return nil, err
	}
	cfg.JWTC.BufferDuration = bud

	return cfg, err

}

// jwt
type JWT struct {
	SigningKey      string        `yaml:"signing_key" json:"signing_key" `   // jwt签名 密码加盐
	ExpiresTime     string        `yaml:"expires_time" json:"expires_time" ` // 过期时间
	ExpiresDuration time.Duration `yaml:"-"`                                 // 解析配置文件的时候 set的
	BufferTime      string        `yaml:"buffer_time" json:"buffer_time" `   // 临期时间
	BufferDuration  time.Duration `yaml:"-"`                                 // 临期时间
	Issuer          string        `yaml:"issuer" json:"issuer" `             // 签发者

}
